前面幾天你試著執行過 terraform apply ".plan"
指令後,會發現有一個 terraform.tfstate
檔案被產生出來,對 Terraform 來說 tfstate
是一個非常重要的文件,用於跟蹤 Terraform 管理的基礎設施的狀態和資源資訊。這個文件包含了目前部署的資源狀態、資源屬性、依賴關係等信息,Terraform 使用它來確定應該如何更新或變更基礎設施。tfstate 文件通常以 JSON 或者 Terraform 二進制(*.tfstate)的格式存在。
為了確保 tfstate
文件的可用性、安全性和共享性,最佳實踐是將它儲存在可靠的外部存儲中,例如 AWS S3。另外,結合 AWS DynamoDB 作為 lock 機制是一個很好的實踐,它可以防止多個 Terraform 實例同時修改基礎設施。
以下是將 tfstate
儲存在 AWS S3 中與與 AWS DynamoDB 作為 lock 機制的步驟:
建立 S3 存儲桶(Bucket): 在 AWS 控制台中,建立一個 S3 存儲桶,這個存儲桶將用來保存 tfstate
文件。
確保設定存儲桶的權限,以允許 Terraform 可以存取它。
建立 DynamoDB 資料表(Table): 在 AWS 控制台中,建立一個 DynamoDB 表,以用作 Terraform 的 lock 機制。你可以為表選擇一個適合的名稱,例如 terraform_locks。在表的主鍵設置中,使用 LockID 作為分區鍵(Partition Key)。
設置 backend s3
in main.tf
主程式中: 在你的 Terraform 設定中,你需要設置一個 Terraform backend,以指定 tfstate 文件的存儲位置。這通常在你的 main.tf 或者 backend.tf 文件中完成。以下是一個 backend 的例子:
terraform {
backend "s3" {
bucket = "your-terraform-state-bucket"
dynamodb_table = "my-terraform-infra-locks"
key = "terraform.tfstate"
region = "ap-northeast-1" # 根據你的 S3 bucketv位置設定
encrypt = true
}
}
bucket
:設定為你在第 1 步中創建的 S3 bucket 名稱。dynamodb_table
: 設定為你在第 2 步中創建的 DynamoDB table 名稱。key
:這是 tfstate 文件的名稱,你可以自行命名。region
:根據你的 S3 存儲桶所在的 AWS 區域來設置。encrypt
:設定為 true 表示啟用加密。初始化 Terraform 專案: 在你的 Terraform 專案目錄中運行 terraform init
命令,以初始化 Terraform 項目並配置 backend。Terraform 將提示你提供任何必需的變數值。
部署 Terraform 配置: 使用 terraform apply
命令來部署 Terraform 配置。Terraform 將自動將 tfstate
文件儲存在指定的 S3 存儲桶中。
維護存儲桶許可權: 請確保設置 S3 存儲桶的許可權以確保只有授權的用戶可以訪問 tfstate
文件。
共享存取: 如果有其他人需要訪問你的 Terraform 項目,請確保他們擁有訪問 S3 存儲桶的權限。他們需要有讀取 tfstate
文件的權限,以便能夠執行 terraform state 和其他操作。
使用 AWS S3 作為 tfstate 存儲的好處是它提供了高度的可用性、持久性和安全性。此外,你可以使用 AWS IAM(Identity and Access Management)來控制誰可以訪問存儲桶中的 tfstate
文件,以確保數據的安全性。